#ifndef __STM32_H__
#define __STM32_H__

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <shmem.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include <msg_queue_peer.h>
#include <stdlib.h>
#include <cJSON.h>
#include <list.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <pthread.h>
#include <log_utils.h>
#define DEV_PATH "/dev/ttyUSB0"
struct data_node
{
    uint32_t led;
    uint32_t light;
    float bat;
};

struct st_node
{
    int key;        // 唯一键值
    char name[128]; // 数据点名称
    int type;       // 数据点类型
};

struct st_node_list
{
    struct st_node node;
    struct list_head list;
};
union val_t
{
    int b_val;   // bool类型存储空间
    int i_val;   // 整形值存储空间
    float f_val; // 浮点值存储空间
};

struct std_node
{
	int key;  //唯一键值
	int type;  //数据点类型
    int dev_type;  //数据点属于哪个设备，根据网关支持的设备自行定义
	union val_t old_val;  //变化上报后需要更新旧值
    union val_t new_val;  //从共享内存取出最新数据，放到new_val中
    int ret;  //默认为-1，采集成功后设置为0，采集失败再置-1
};
struct msgbuf
{
    long mtype;
    char mdata[512];
};
struct msg
{
    int key;
    char name[32];
};

int serial_init();

void cjson_jx();
void *shmsend(void *arg);
void *msgrecv(void *arg);
#endif // !__RECV_H__